/*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
  |         Métodos Numéricos I - Tarefa.1 - Questão.1         |
  | (converter um número de binário para decimal e vice-versa) |
  |____________________________________________________________|*/

// É Linux ou é Windows?
#ifdef linux      // Sistema Operacional: Linux.
    #define sistema_operacional 0
#else
    #ifdef _WIN32 // Sistema Operacional: Windows.
        #define sistema_operacional 1
    #endif
#endif
// Vixe! Não é nenhum dos 2...
#ifndef sistema_operacional
    #error Sistema Operacional desconhecido!!! So rodo no Linux ou no Windows!!!
#endif

/*** LIXUX - INCLUDES E DEFINES ***/
#if (sistema_operacional == 0)
    #include "Extras/fuba_linux.h"
#endif

/*** WINDOWS - INCLUDES E DEFINES ***/
#if (sistema_operacional == 1)
    #include "Extras/fuba_win.h"
#endif

/*** DEFINES do programa ***/
// NADA!

/*** INCLUDES do programa ***/
#include <iostream>
#include <string>

#include "Conversao/bin2dec.h"
#include "Conversao/dec2bin.h"
#include "Conversao/str_bin.h"
using namespace std;

int main(void) // PRINCIPAL //
{
    // Variáveis do MAIN:
    char escolha = '\0';
    int numero_decimal = 0;
    string numero_binario;

    do{// MENU PRINCIPAL //
        limpar_tela();
        cout <<"#=============================================================#"<<endl;
        cout <<"#        [Metodos Numericos I - Tarefa.1 - Questao.1]         #"<<endl;
        cout <<"#        (binario ---> decimal / decimal ---> binario)        #"<<endl;
        cout <<"#=============================================================#"<<endl;
        cout <<"> Escolha:"<<endl;
        cout <<"  (1) Binario ---> Decimal;"<<endl;
        cout <<"  (2) Decimal ---> Binario;"<<endl;
        cout <<"  (X) Sair do programa."<<endl;
        escolha = ler_tecla();
        switch(escolha)
        {
            case '1':
            {
                do{
                    /* O menu "Binario ---> Decimal" encontra-se dentro da função "string_binaria". */
                    string_binaria(&numero_binario);
                    binario_para_decimal(numero_binario,&numero_decimal);
                    cout <<endl;
                    cout <<"   > Binario: "<<numero_binario<<endl;
                    cout <<"   > Decimal: "<<numero_decimal<<endl;
                    pausar();
                }while(numero_binario.compare("0") != 0); // Rodar esse loop enquanto "numero_binario" for diferente de zero.
                break;
            }
            case '2':
            {
                do{
                    limpar_tela();
                    cout <<"+------------------------+"<<endl;
                    cout <<"|  Decimal ---> Binario  |"<<endl;
                    cout <<"+------------------------+"<<endl;
                    cout <<" * Digite o numero decimal"<<endl;
                    cout <<"   (ou \"0\" para voltar ao menu anterior): ";
                    cin >> numero_decimal;
                    decimal_para_binario(&numero_decimal,&numero_binario);
                    cout <<"   > Decimal: "<<numero_decimal<<endl;
                    cout <<"   > Binario: "<<numero_binario<<endl;
                    pausar();
                }while(numero_decimal != 0); // Rodar esse loop enquanto "numero_decimal" for diferente de zero.
                break;
            }
        }// fim do "switch(escolha)" //
      }while(escolha!='X');// fim do "MENU PRINCIPAL" //
    return(0);
}
